package com.xuehu.reflex;

import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ClassLoaderTest {

    @Test
    public void test1() {
        //系统类加载器
        //对于自定义类，使用系统类加载器进行加载
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        System.out.println(classLoader);
        //扩展类加载器
        //调用系统类加载器的getParent(),获取扩展类加载器
        ClassLoader classLoader1 = classLoader.getParent();
        System.out.println(classLoader1);
        //这个应该是引导类加载器
        //但是无法获取
        //调用扩展类加载器的getParent():无法获取引导类加载器
        //引导类加载器主要负责加载java的核心类库，无法加载自定义类。
        ClassLoader classLoader2 = classLoader1.getParent();
        System.out.println(classLoader2);

        //String是引导类加载器
        ClassLoader classLoader3 = String.class.getClassLoader();
        System.out.println(classLoader3);

    }


    /**
     * Properties: 用来读取配置文件。
     */
    @Test
    public void test2() throws IOException {
        Properties pros = new Properties();
//        FileInputStream fileInputStream = new FileInputStream("jdbc1.properties");


        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();

        //这时读取的文件路径是在src下面，不能和model下面的文件重名
        //读取配置文件的方式二: 使用ClassLoader
        //配置文件默认识别为:    当前module的src下
        InputStream resourceAsStream = classLoader.getResourceAsStream("jdbc1.properties");
        pros.load(resourceAsStream);

        String user = pros.getProperty("user");
        String password = pros.getProperty("password");
        System.out.println("user = " + user + ", password = " + password);

    }

}
